03-SSL인증서적용

SSL 인증서 적용

개요

Apache HTTP Server에 SSL 인증서를 적용하여 HTTPS 보안 통신을 구현합니다. Let's Encrypt와 AWS Certificate Manager 두 가지 방법을 제공합니다.

방법 선택 가이드

방법 A: Let's Encrypt (현재 단계 권장)

특징:

적용 시점: 현재 (Week3 완료 후)

방법 B: AWS Certificate Manager (Week3.5 이후)

특징:

적용 시점: Week3.5 ALB 구축 후

상황별 선택 권장

현재 상황: 방법 A (Let's Encrypt) 권장

Week3.5 완료 후: 방법 B로 전환


방법 A: Let's Encrypt 적용

1단계: Certbot 설치

Apache Web 서버에 SSH 접속:

ssh -i webapp-keypair.pem ec2-user@Web서버-Public-IP

Amazon Linux 2023에 Certbot 설치:

# EPEL 저장소 활성화
sudo dnf install -y epel-release

# Certbot과 Apache 플러그인 설치
sudo dnf install -y certbot python3-certbot-apache

# 설치 확인
certbot --version

2단계: Apache 가상 호스트 준비

SSL 인증서 발급을 위해 도메인 기반 가상 호스트 설정:

# 기존 설정 백업
sudo cp /etc/httpd/conf.d/webapp.conf /etc/httpd/conf.d/webapp.conf.backup

# 가상 호스트 설정 편집
sudo nano /etc/httpd/conf.d/webapp.conf

다음 내용으로 수정:

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/html
    
    # JSP 요청을 Tomcat으로 프록시
    ProxyPreserveHost On
    ProxyPass /webapp/ http://WAS서버-Private-IP:8080/webapp/
    ProxyPassReverse /webapp/ http://WAS서버-Private-IP:8080/webapp/
    
    # 정적 파일 디렉토리 설정
    <Directory "/var/www/html">
        AllowOverride None
        Require all granted
    </Directory>
    
    # 로그 설정
    ErrorLog logs/yourdomain_error.log
    CustomLog logs/yourdomain_access.log combined
</VirtualHost>

Apache 설정 테스트 및 재시작:

# 설정 문법 확인
sudo httpd -t

# Apache 재시작
sudo systemctl restart httpd

# 상태 확인
sudo systemctl status httpd

3단계: SSL 인증서 발급

Certbot을 사용하여 Let's Encrypt 인증서 발급:

# 자동 설정 모드로 인증서 발급
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

대화형 설정 진행:

이메일 주소 입력: admin@yourdomain.com
약관 동의: A (Agree)
뉴스레터 수신: N (선택사항)
HTTP 트래픽 처리 방법:
  1: HTTP 접속 유지
  2: HTTP를 HTTPS로 리다이렉트 (권장)
선택: 2

4단계: SSL 설정 확인

Certbot이 자동으로 생성한 SSL 설정 확인:

# SSL 가상 호스트 설정 확인
sudo cat /etc/httpd/conf.d/yourdomain.com-le-ssl.conf

# Apache 포트 443 리스닝 확인
sudo netstat -tlnp | grep :443

# SSL 모듈 로드 확인
sudo httpd -M | grep ssl

생성된 SSL 설정 예시:

<VirtualHost *:443>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/html
    
    # SSL 인증서 설정
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
    
    # 프록시 설정 (기존과 동일)
    ProxyPreserveHost On
    ProxyPass /webapp/ http://WAS서버-Private-IP:8080/webapp/
    ProxyPassReverse /webapp/ http://WAS서버-Private-IP:8080/webapp/
</VirtualHost>

5단계: 자동 갱신 설정

Let's Encrypt 인증서는 90일마다 갱신이 필요합니다:

# 갱신 테스트 (실제 갱신은 하지 않음)
sudo certbot renew --dry-run

# 자동 갱신을 위한 cron 작업 추가
sudo crontab -e

# 다음 라인 추가 (매일 새벽 2시에 갱신 확인)
0 2 * * * /usr/bin/certbot renew --quiet && /bin/systemctl reload httpd

자동 갱신 확인:

# cron 작업 목록 확인
sudo crontab -l

# certbot 갱신 로그 확인
sudo tail -f /var/log/letsencrypt/letsencrypt.log

방법 B: AWS Certificate Manager (참고용)

개념 설명

현재 단계에서는 사용할 수 없지만, Week3.5의 ALB 구축 시 활용할 예정입니다.

Certificate Manager 특징

Week3.5에서 사용할 구조

사용자 → ALB (Certificate Manager SSL) → Apache (HTTP) → Tomcat

전환 계획

Week3.5 ALB 구축 완료 후:

  1. Certificate Manager에서 인증서 발급
  2. ALB에 SSL 적용
  3. Apache에서 SSL 설정 제거
  4. HTTP → HTTPS 리다이렉트를 ALB에서 처리

두 방법 비교

항목 Let's Encrypt Certificate Manager
비용 무료 무료 (AWS 연동시)
설치 위치 EC2 Apache ALB/CloudFront
갱신 방식 자동 (cron) 완전 자동
관리 복잡도 중간 낮음
서버 의존성 높음 없음
현재 사용가능 가능 불가 (ALB 필요)
확장성 제한적 높음

HTTPS 동작 확인

웹사이트 접속 테스트

HTTPS 직접 접속:

https://yourdomain.com/webapp/
https://www.yourdomain.com/webapp/

HTTP 리다이렉트 테스트:

http://yourdomain.com/webapp/ → https로 자동 전환 확인

브라우저에서 SSL 인증서 확인

  1. 브라우저 주소창에서 자물쇠 아이콘 클릭
  2. 인증서 정보 확인:

SSL 보안 강도 테스트

SSL Labs 테스트:

https://www.ssllabs.com/ssltest/

문제 해결

SSL 인증서 발급 실패

일반적인 원인:

  1. 도메인 소유 확인 실패

    • DNS가 정확히 Web 서버를 가리키는지 확인
    • 포트 80이 열려있는지 확인
  2. 방화벽 문제

    # 보안 그룹에서 포트 80, 443 확인
    # Apache가 포트 80에서 리스닝하는지 확인
    sudo netstat -tlnp | grep :80
    
  3. 기존 SSL 설정 충돌

    # 기존 SSL 설정 파일 확인
    sudo ls -la /etc/httpd/conf.d/*ssl*
    
    # 충돌하는 설정 파일 백업 후 제거
    sudo mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.backup
    

HTTPS 접속 불가

점검 순서:

  1. Apache SSL 모듈 확인

    sudo httpd -M | grep ssl
    # 결과: ssl_module (shared) 표시되어야 함
    
  2. 포트 443 리스닝 확인

    sudo netstat -tlnp | grep :443
    
  3. 보안 그룹 설정

    • EC2 콘솔에서 HTTPS 포트 443 확인
    • 인바운드 규칙에 0.0.0.0/0 허용 확인
  4. 인증서 파일 권한 확인

    sudo ls -la /etc/letsencrypt/live/yourdomain.com/
    

완료 체크리스트

Let's Encrypt 설정 완료

HTTPS 동작 확인

보안 검증

중요 사항

인증서 관리

Week3.5 전환 준비

백업 및 복구


SSL 인증서 적용 완료

Let's Encrypt를 통해 HTTPS 보안이 성공적으로 적용되었습니다. 이제 프로덕션급 보안을 갖춘 웹 서비스를 도메인으로 제공할 수 있습니다.

다음 단계: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/00-도메인연결및SSL적용(선택)/04-HTTPS동작확인에서 전체 시스템의 동작을 검증하고 Week3.5 고가용성 구축을 준비합니다.


관련 문서: AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/00-도메인연결및SSL적용(선택)/02-도메인DNS변경, AWS EDU/Archive/조선대학교 AWS 멘토링/Week3.5-HA-Scalable-WebService/00-도메인연결및SSL적용(선택)/04-HTTPS동작확인